let ary = [1, [2, [3, [4, 5]]], 6];

// 递归 有点绕
// function flatArr(arr) {
//     let result = [];
//     for (const item of arr) {
//        if(Array.isArray(item)) {
//         let res = flatArr(item);
//         console.log('res',res);
//         // result = result.concat(flatArr(item));
//         // result.push(...flatArr(item));
//        }else {
//          result.push(item);   
//        }     
//     }
//     return result;
// }
// 第1层：flatArr([1, [2, 3, [4]]])
// ├─ item=1 → 非数组 → result.push(1) → result=[1]
// ├─ item=[2, 3, [4]] → 数组 → 递归调用第2层
// │  第2层：flatArr([2, 3, [4]])
// │  ├─ item=2 → 非数组 → result.push(2) → result=[2]
// │  ├─ item=3 → 非数组 → result.push(3) → result=[2,3]
// │  ├─ item=[4] → 数组 → 递归调用第3层
// │  │  第3层：flatArr([4])
// │  │  ├─ item=4 → 非数组 → result.push(4) → result=[4]
// │  │  └─ 返回：[4] ⬅️ 打印 'res [4]'
// │  └─ 返回：[2, 3] ⬅️ 打印 'res [2, 3]'
// └─ 返回：[1] ⬅️ 最终结果
// flatArr([1,[2,3,[4]]]);

// reduce + 递归
// function flatArrReduce(arr) {
//     return arr.reduce((res,item)=>{
//         if(Array.isArray(item)) {
//             // res.push(...flatArrReduce(item));
//             // return [...res,...flatArrReduce(item)];
//             return res.concat(flatArrReduce(item));
//         }else {
//            return res.concat(item);
//         }
//     },[]);
// }
// console.log(flatArrReduce([1,[2,3]]));

// while循环
// function flatArrWhile(arr) {
//     if (!arr.length) return;
//     while (arr.some((item) => Array.isArray(item))) {
//         // 这里要把数组展开，不然就无限循环了
//       arr = [].concat(...arr);
//     }
//     return arr;
// }
// console.log(flatArrWhile(ary));

// function flatArrWhile(arr) {
//     while (arr.some(Array.isArray)) {
//         arr = [].concat(...arr);
//       }
//       return arr;
// }
// console.log(flatArrWhile(ary));

// // 1. 箭头函数（最明确）
// arr.some(item => Array.isArray(item));

// // 2. 函数表达式  
// arr.some(function(item) {
//     return Array.isArray(item);
// });

// // 3. 直接传递函数（最简洁）
// arr.some(Array.isArray);

// 数组的flat方法
const flat = ary.flat(Infinity);
console.log(flat);




